package com.flowumi.controladores.profesor;

import com.flowumi.controladores.SessionFlowumiUtilBean;
import com.flowumi.entity.Actividades;
import com.flowumi.entity.Algoritmo;
import com.flowumi.entity.CasosCalificacion;
import com.flowumi.facade.ProfesorFacade;
import java.io.IOException;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.NavigationHandler;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.context.Flash;
import org.apache.log4j.Logger;

/**
 *
 * @author SP4339KL
 */
@ManagedBean
@ViewScoped
public class ProfesorDetalleActividadBean implements Serializable {

    private static final Logger LOGGER =
            Logger.getLogger(ProfesorDetalleActividadBean.class);
    @EJB
    ProfesorFacade profesorFacade;
    private Actividades actividad;
    private CasosCalificacion casosCalificacion;
    private String entradas;
    private String salidas;
@ManagedProperty("#{sessionFlowumiUtil}")
    private SessionFlowumiUtilBean sessionBean;

    public void setSessionBean(SessionFlowumiUtilBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public ProfesorDetalleActividadBean() {
    }

    @PostConstruct
    public void init() {
        if (sessionBean.getUsuario().getIdRol() == null || sessionBean.getUsuario().getIdRol().getIdRol() != 2) {
            try {
                sessionBean.Desconectar();
                FacesContext.getCurrentInstance().getExternalContext().redirect("InicioSession.xhtml");
            } catch (IOException ex) {
                LOGGER.error(ex);
            }
        }
        Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
        Long idCurso = (Long) flash.get("idCurso");
        Integer idActividad = (Integer) flash.get("idActividad");
        if (idCurso != null && idActividad != null) {
            actividad = profesorFacade.getActividadProfesor(idCurso, idActividad);
            casosCalificacion = new CasosCalificacion();
        } else {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            String redirect = "/pages/ProfesorInicio.xhtml";
            NavigationHandler myNav = facesContext.getApplication().getNavigationHandler();
            myNav.handleNavigation(facesContext, null, redirect);
        }
    }

    public Actividades getActividad() {
        return actividad;
    }

    public void setActividad(Actividades actividad) {
        this.actividad = actividad;
    }

    public CasosCalificacion getCasosCalificacion() {
        return casosCalificacion;
    }

    public void setCasosCalificacion(CasosCalificacion casosCalificacion) {
        this.casosCalificacion = casosCalificacion;
    }

    public String getEntradas() {
        return entradas;
    }

    public void setEntradas(String entradas) {
        this.entradas = entradas;
    }

    public String getSalidas() {
        return salidas;
    }

    public void setSalidas(String salidas) {
        this.salidas = salidas;
    }

    public void ActualizarActividad() {
        profesorFacade.actualizarActividad(actividad);
    }

    public void reset() {
        actividad = profesorFacade.getActividadProfesor(actividad.getCurso().getIdCurso(), actividad.getIdActividad());
    }

    public String GoEditorAlgoritmo() {
        if (actividad.getIdAlgoritmo() == null) {
            actividad.setIdAlgoritmo(new Algoritmo());
            actividad  = profesorFacade.actualizarActividad(actividad);
            
        }
        LOGGER.info("Navegando a la pagina de edicion del algoritmo con id: " + actividad.getIdAlgoritmo().getIdAlgoritmo());
        Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
        flash.put("idAlgoritmo", actividad.getIdAlgoritmo().getIdAlgoritmo());
        LOGGER.debug("go");
        return "/pages/ProfesorActividadAlgoritmo.xhtml";
    }

    public String convertBytetoString(byte[] bs) {
        return new String(bs);
    }

    public void crearCasoCalificacion() {
        casosCalificacion.setEntradas(entradas.getBytes());
        casosCalificacion.setSalidas(salidas.getBytes());
        casosCalificacion.setActividades(actividad);
        actividad.getCasosCalificacionList().add(casosCalificacion);
        profesorFacade.actualizarActividad(actividad);
        casosCalificacion = new CasosCalificacion();
        entradas = "";
        salidas = "";
        actividad = profesorFacade.getActividadProfesor(actividad.getCurso().getIdCurso(), actividad.getIdActividad());
        casosCalificacion = new CasosCalificacion();
    }
    
    public void calificarActividad(){
        profesorFacade.calificarActividad(actividad);
        actividad = profesorFacade.getActividadProfesor(actividad.getCurso().getIdCurso(), actividad.getIdActividad());
    }
    
}
